package com.augurit.common.util.lang;

import java.io.IOException;
import java.io.Reader;
import java.sql.Clob;
import java.util.List;

/**
 * 提供字符串方面的工具方法
 */
public class StringUtils extends org.apache.commons.lang.StringUtils {

	/**
	 * 判断字符串是否存在非空格字符
	 * @param str 字符串
	 * @return true表示没有字符或为空格字符，false表示存在非空格字符
	 */
	public static boolean isBlank(String str){
		return org.apache.commons.lang.StringUtils.isBlank(str);
	}
	
	/**
	 * 判断字符串是否存在非空格字符
	 * @param str 字符串
	 * @return true表示存在非空格字符，false表示没有字符或为空格字符
	 */
	public static boolean isNotBlank(String str){
		return org.apache.commons.lang.StringUtils.isNotBlank(str);
	}
	
	/**
	 * 判断字符串是否存在字符（包括空格字符）
	 * @param str 字符串
	 * @return true表示存在字符（包括空格字符），false表示没有任何字符
	 */
	public static boolean isNotEmpty(String str){
		return org.apache.commons.lang.StringUtils.isNotEmpty(str);
	}
	
	

	/**
	 * 把字符串数组拼装成字符串，以指定的字符分隔
	 * @param strArray 字符串数组
	 * @param separator 分隔符
	 * @return 字符串
	 */
	public static String convertStringArrayToString(String[] strArray, String separator){
		if(strArray != null && strArray.length > 0){
			StringBuffer sb = new StringBuffer();
			for(int i=0; i<strArray.length; i++){
				sb.append(strArray[i]);
				
				if(i < strArray.length-1)
					sb.append(separator==null?"":separator);
			}
			return sb.toString();
		}else
			return null;
	}
	
	/**
	 * 把字符串数组拼装成字符串，以指定的字符分隔
	 * @param strList 字符串列表
	 * @param separator 分隔符
	 * @return 字符串
	 */
	public static String convertStringListToString(List<String> strList, String separator){
		if(strList != null && strList.size() > 0){
			StringBuffer sb = new StringBuffer();
			for(int i=0; i<strList.size(); i++){
				sb.append(strList.get(i));
				
				if(i < strList.size()-1)
					sb.append(separator==null?"":separator);
			}
			return sb.toString();
		}else
			return null;
	}
	
	/**
	 * 将字符串数组转换为Long数组
	 * @param strArray
	 * @return
	 */
	public static Long[] convertStringArrayToLongArray(String[] strArray){
		if(strArray != null && strArray.length > 0){
			Long[] result = new Long[strArray.length];
			for(int i=0; i<strArray.length; i++){
				result[i] = Long.valueOf(strArray[i]);
			}
			return result;
		}else
			return null;
	}
	
	/**
	 * 将Long数组拼装成字符串
	 * @param array
	 * @param separator
	 */
	public static String convertLongArrayToString(Long[] array, String separator){
		if(array != null && array.length > 0){
			StringBuffer sb = new StringBuffer();
			for(int i = 0; i < array.length; i++){
				sb.append(array[i]);
				if(i != array.length - 1)
					sb.append(separator==null?"":separator);
			}
			return sb.toString();
		}
		return null;
	}
	
	/**
	 * 把字符转换Long数组
	 * @param str
	 * @param separator
	 * @return
	 */
	public static Long[] splitStringToArray(String str, String separator){
		Long[] result = null;
		if(str != null && str.trim().length() > 0){
			String[] strArray = str.split(separator);
			if(strArray != null && (strArray.length) !=0){
				result = new Long[(strArray.length)];
				for (int i = 0; i < strArray.length; i++){
					result[i] = Long.parseLong(strArray[i].trim());
				}
					
			}
		}
		return  result;
	}
	
	public static String replaceLast(String str, String oldChar, String newChar){
		if(str != null && oldChar != null && newChar != null){
			int pos = str.lastIndexOf(oldChar);
			if(pos >= 0){
				String part1 = str.substring(0, pos);
				String part2 = str.substring(pos + oldChar.length(), str.length());
				return part1 + newChar + part2;
			}
		}
		return null;
	}
	
	/**
	 * 用分隔符连接字符串数组
	 * @param seperator
	 * @param strings
	 * @return
	 */
	public static String join(String seperator, String[] strings) {
		int length = strings.length;
		if ( length == 0 ) return "";
			StringBuffer buf = new StringBuffer( length * strings[0].length() )
			.append( strings[0] );
		for ( int i = 1; i < length; i++ ) {
			buf.append( seperator ).append( strings[i] );
		}
		return buf.toString();
	}

	/**
	 * 替换一次字符串中的占位符
	 * @param template
	 * @param placeholder
	 * @param replacement
	 * @return
	 * cuigeqiang
	 */
	public static String replaceOnce(String template, String placeholder, String replacement) {
        int loc = template == null ? -1 : template.indexOf( placeholder );
		if ( loc < 0 ) {
			return template;
		}
		else {
			return new StringBuffer( template.substring( 0, loc ) )
					.append( replacement )
					.append( template.substring( loc + placeholder.length() ) )
					.toString();
		}
	}
	
	/**
	 * 将字符串加入前缀
	 * @param prefix
	 * @param name
	 * @return
	 * cuigeqiang
	 */
	public static String qualify(String prefix, String name) {
		if ( name == null || prefix == null ) {
			throw new NullPointerException();
		}
		return new StringBuffer( prefix.length() + name.length() + 1 )
				.append(prefix)
				.append('.')
				.append(name)
				.toString();
	}
	
	/**
	 * 去掉最后一个.前面的所有字符
	 * @param qualifiedName
	 * @return
	 * cuigeqiang
	 */
	public static String unqualify(String qualifiedName) {
		int loc = qualifiedName.lastIndexOf(".");
		return ( loc < 0 ) ? qualifiedName : qualifiedName.substring( qualifiedName.lastIndexOf(".") + 1 );
	}

	/**
	 * 获取最后一个.前面的所有字符
	 * @param qualifiedName
	 * @return
	 * cuigeqiang
	 */
	public static String qualifier(String qualifiedName) {
		int loc = qualifiedName.lastIndexOf(".");
		return ( loc < 0 ) ? "" : qualifiedName.substring( 0, loc );
	}
	
	/**
	 * CLOB转换成STRING
	 * @param clob
	 * @return
	 * cuigeqiang
	 */
	public static String clob2string(Clob clob){
		StringBuffer sb=new StringBuffer(1024);
		Reader lobReader=null;
		try{
			lobReader=clob.getCharacterStream();
			char[] buffer=new char[(int)clob.length()];
			int length=0;
			while((length=lobReader.read(buffer))!=-1){
				sb.append(buffer);
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}finally{
			if(lobReader!=null){
				try {
					lobReader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return sb.toString();
	}
	
	/**
	 * HTML格式的转义文本
	 * @param str
	 * @return
	 * cuigeqiang
	 */
	public static String toHtml(String str){
		String returnStr="";
		if(isNotBlank(str)){
			returnStr=str.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;");
		}
		return returnStr;
	}
	
	/**
	 * 将数据库名称转成JAVA名称
	 * @param str
	 * @return
	 * cuigeqiang
	 */
	public static String toJavaName(String str){
		StringBuffer sb=new StringBuffer();
		String[] strArr=str.toLowerCase().split("_");
		for(int i=0;i<strArr.length;i++){
			if(i==0){
				sb.append(strArr[i]);
			}else{
				if(strArr[i]!=null&&!strArr[i].trim().equals("")){
					sb.append(strArr[i].substring(0, 1).toUpperCase());
					sb.append(strArr[i].substring(1));
				}
			}
		}
		return sb.toString();
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(StringUtils.isNotBlank("  "));
		System.out.println(StringUtils.isNotEmpty(""));
		
		System.out.println(replaceLast("/test/test1/test2/test1/test2/test3", "/test2", "/test4"));
	}
}
